<?php
/**
 * Ohlasky Model for Ohlasky Component
 * @license		GNU/GPL
 */

// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die();

jimport( 'joomla.application.component.model' );

/**
 * Ohlasky Model
 */
class OhlaskyModelOhlasky extends JModel
{

    /**
     * Gets the hruby_popis
     * @return string The hruby_popis to be displayed to the user
     */
    function getHruby_popis()
    {
        $db =& JFactory::getDBO();

        $query = 'SELECT hruby_popis FROM #__ohlasky';
        $db->setQuery( $query );
        $hruby_popis = $db->loadResult();

        return $hruby_popis;
    }



    function getAktualni_tyden()
    {
        $aktualni_tyden = null;
        $dateTime_obj = new DateTime();
        $tyden_cislo_str = $dateTime_obj->format('W');
        $tyden_cis_int = $tyden_cislo_str;
        settype($tyden_cis_int, "integer");

        $rok_str = $dateTime_obj->format('Y');
        $rok_int = $rok_str;
        settype($rok_int, "integer");
        $db =& JFactory::getDBO();
        $query1 = 'SELECT * FROM #__tydny WHERE #__tydny.rok = '.$rok_int.' AND #__tydny.tyden_cislo = '.$tyden_cis_int;
        $db->setQuery( $query1 );
        $aktualni_tyden = $db->loadObject();
        return $aktualni_tyden;
    }

    function getPosledni_tyden()
    {
        $db =& JFactory::getDBO();
        $query3 = 'SELECT * FROM #__tydny
        ORDER BY ode_dne DESC LIMIT 1';
        $db->setQuery( $query3 );
        $posledni_tyden = $db->loadObject();
        return $posledni_tyden;
    }

    function getAktualni_mista($tyden_id, $tyden_predch_id = null) {
        if (empty($tyden_id)) {
            //chyba
            return null;
        } else {
            $db =& JFactory::getDBO();
            if (empty($tyden_predch_id)) {
                $query5 = 'SELECT * FROM #__mista	 WHERE #__mista.id in
(select misto_id from #__ohlasky where #__ohlasky.tyden_id = '.$tyden_id.')';
            } else {
                $query5 = 'SELECT * FROM #__mista	 WHERE #__mista.id in
(select misto_id from #__ohlasky where #__ohlasky.tyden_id = '.$tyden_id.'
OR #__ohlasky.tyden_id = '.$tyden_predch_id.' )';
            }

            $db->setQuery( $query5 );
            $mista_obj_list = $db->loadObjectList();
            return $mista_obj_list;
        }
    }

    function getPredchoziTyden(&$nalezeny_tyden_obj) {
        $chyba = '';
        if (!is_object($nalezeny_tyden_obj)) {
            $chyba = 'Nebyl předán týden jako objekt!';
            return null;
        }
        if (empty($chyba)) {
            $ode_dne = $nalezeny_tyden_obj->ode_dne;
            $dateTime = new DateTime($ode_dne);
            //$ode_dne_cis_str = $dateTime->format('N');
            $dateTime->modify('-7 day');
            $ode_dne_new = $dateTime->format('Y-m-d');
            $db =& JFactory::getDBO();
            $query8 = 'SELECT * FROM #__tydny
WHERE #__tydny.ode_dne =  "'.$ode_dne_new.'"';
            $db->setQuery( $query8 );
            $predch_tyden_obj = $db->loadObject();
            if (!is_object($predch_tyden_obj)) {
                return 'Předchozí týden nenalezen - ode dne: '.$ode_dne_new.'!';
            } else {
                return $predch_tyden_obj;
            }
        }
    }

    //vraci seznam objektu
    function getAktualni_ohlasky()
    {
        $vc_predch_nedele = false;
        $predch_tyden_obj = null;
        $db =& JFactory::getDBO();
        $chyba = '';
        $query9 = 'SELECT * FROM #__nastaveni';
        $db->setQuery( $query9 );
        $nastaveni = $db->loadObject();
        if (is_object($nastaveni)) {
            if ($nastaveni->vc_predch_nedele == true) {
                $vc_predch_nedele = true;
            }
        }
        $tyden_id_int = JRequest::getVar('tyden_id',  0, '', 'integer');
        if (!empty($tyden_id_int)) {
            //hledame tyden dle predaneho id
            $nalezeny_tyden_obj = $this->getTyden_id($tyden_id_int);
            if (empty($nalezeny_tyden_obj)) {
                $chyba = 'CHYBA: Týden id: '.$tyden_id_int.' nebyl nalezen!';
            }
        } else {
            //hledame aktualni nebo posledni tyden ohlasek
            $nalezeny_tyden_obj = $this->getAktualni_tyden();
            if (empty($nalezeny_tyden_obj)) {
                $nalezeny_tyden_obj = $this->getPosledni_tyden();
                if (empty($nalezeny_tyden_obj)) {
                    $chyba = 'V databázi nebyly nalezeny události ani jediného týdne!';
                }
            }
        }
        $tyden_od_dne_str = '';
        if (empty($chyba)) {
            $ode_dne_obj = date_create($nalezeny_tyden_obj->ode_dne);
            if (is_object($ode_dne_obj)) {
                $tyden_od_dne_str = $ode_dne_obj->format('j.n.Y');
            }
            if (!$nalezeny_tyden_obj->zverejnen) {
                $chyba = 'Události týdne od '.$tyden_od_dne_str.' se upravují!';
            }
        }
        if (empty($chyba)) {
            $mista_obj_list = array();
            $nalezeny_tyden_id = $nalezeny_tyden_obj->id;
            settype($nalezeny_tyden_id, "integer");
            if ($vc_predch_nedele == true) {
                $predch_tyden_obj = $this->getPredchoziTyden($nalezeny_tyden_obj);
                if (is_object($predch_tyden_obj)) {
                    $predch_tyden_id = $predch_tyden_obj->id;
                    settype($predch_tyden_id, "integer");
                    $mista_obj_list = $this->getAktualni_mista($nalezeny_tyden_id, $predch_tyden_id);
                }
            }
            if (empty($mista_obj_list)) {
                $mista_obj_list = $this->getAktualni_mista($nalezeny_tyden_id);
            }
            if (empty($mista_obj_list)) {
                $chyba = 'Týden od '.$tyden_od_dne_str.' neobsahuje žádné události!';
            }
        }

        if (empty($chyba)) {
            //vytvoreni pole s misty
            $x = 0;
            while (list($key, $misto_obj) = each($mista_obj_list)) {
                $mista_arr[$x] = $misto_obj->misto;
                $x++;
            }

            //vytvoreni pole se dny v tydnu $dny_tydne_arr
            $z = 0;
            if ($vc_predch_nedele == true) {
                $datum_predch_nedele = '';
                if (is_object($predch_tyden_obj)) {
                    if (!empty($predch_tyden_obj->litur_ne)) {
                        $dny_tydne_arr[$z] = '-1';
                        $z++;
                        $ode_dne = $nalezeny_tyden_obj->ode_dne;
                        $dateTime_obj = new DateTime($ode_dne);
                        if (is_object($dateTime_obj)) {
                            $dateTime_obj->modify('-1 day');
                            $datum_predch_nedele = $dateTime_obj->format('Y-m-d');
                        }
                    }
                }
            }
            $dny_tydne_arr[$z] = '1';
            $z++;
            $dny_tydne_arr[$z] = '2';
            $z++;
            $dny_tydne_arr[$z] = '3';
            $z++;
            $dny_tydne_arr[$z] = '4';
            $z++;
            $dny_tydne_arr[$z] = '5';
            $z++;
            $dny_tydne_arr[$z] = '6';
            $z++;
            $dny_tydne_arr[$z] = '7';
            $z++;

            //inicializace pole bunky tabulky
            foreach ($dny_tydne_arr as $den_tydne_str) {
                foreach ($mista_arr as $misto) {
                    $radek_bunky_arr = array('&nbsp;');
                    $bunky_arr[$den_tydne_str][$misto] = $radek_bunky_arr;
                }
            }

            if (($vc_predch_nedele == true) && (!empty($datum_predch_nedele))) {

                $query2 = 'SELECT #__mista.misto, #__ohlasky.datum, #__ohlasky.cas,
            #__ohlasky.cas_konec, #__ohlasky.hruby_popis, #__ohlasky.zvyrazneni
            FROM #__ohlasky JOIN #__mista
            ON #__ohlasky.misto_id = #__mista.id
            WHERE  #__ohlasky.tyden_id = '.$nalezeny_tyden_id.'
            OR #__ohlasky.datum = "'.$datum_predch_nedele.'"
            ORDER BY #__ohlasky.cas';

            } else {
                $query2 = 'SELECT #__mista.misto, #__ohlasky.datum, #__ohlasky.cas,
            #__ohlasky.cas_konec, #__ohlasky.hruby_popis, #__ohlasky.zvyrazneni
            FROM #__ohlasky JOIN #__mista
            ON #__ohlasky.misto_id = #__mista.id
            WHERE  #__ohlasky.tyden_id = '.$nalezeny_tyden_id.' ORDER BY #__ohlasky.cas';
            }
            $db->setQuery( $query2 );
            $akt_ohlasky_obj_list = $db->loadObjectList();

            $query10 = 'SELECT * FROM #__barvy';
            $db->setQuery( $query10 );
            $barvy_obj_list = $db->loadObjectList();

            if (is_array($akt_ohlasky_obj_list)) {
                foreach ($akt_ohlasky_obj_list as $ohlaska_obj)
                {
                    $cas = $ohlaska_obj->cas;
                    $datum =  $ohlaska_obj->datum;
                    $datum_a_cas = $datum.' '.$cas;
                    $dateTimeObj = new DateTime($datum_a_cas);
                    $den_tydne_str = $dateTimeObj->format('N');
                    if (($den_tydne_str == '7') && ($vc_predch_nedele == true)) {
                        if ($datum == $datum_predch_nedele) {
                            $den_tydne_str = '-1';
                        }
                    }
                    $misto = $ohlaska_obj->misto;
                    $ind = count($bunky_arr[$den_tydne_str][$misto]);
                    if ($ind == 1) {
                        if ($bunky_arr[$den_tydne_str][$misto][0] == '&nbsp;') {
                            $ind = 0;
                        }
                    }
                    $bunky_arr[$den_tydne_str][$misto][$ind] = $ohlaska_obj;
                }
            } else {
                $chyba = 'V týdnu od '.$tyden_od_dne_str.' nebyly nalezeny žádné události!';
            }
            //najdeme odstavce tydne a ulozime je do pole
            $query7 = 'SELECT * FROM #__odstavce
            WHERE  #__odstavce.tyden_id = '.$nalezeny_tyden_id.' ORDER BY #__odstavce.por_cis';
            $db->setQuery( $query7 );
            $odstavce_obj_list = $db->loadObjectList();

            $aktualni_ohlasky['bunky_arr'] = $bunky_arr;
            $aktualni_ohlasky['mista_arr'] = $mista_arr;
            $aktualni_ohlasky['nalezeny_tyden_obj'] = $nalezeny_tyden_obj;
            $aktualni_ohlasky['dny_tydne_arr'] = $dny_tydne_arr;
            //$aktualni_ohlasky['tydny_roku_obj_list'] = $tydny_roku_obj_list;
            $aktualni_ohlasky['odstavce_obj_list'] = $odstavce_obj_list;
            $aktualni_ohlasky['vc_predch_nedele'] = $vc_predch_nedele;
            $aktualni_ohlasky['predch_tyden_obj'] = $predch_tyden_obj;
            $aktualni_ohlasky['barvy_obj_list'] = $barvy_obj_list;

        }
        $aktualni_ohlasky['nastaveni'] = $nastaveni;
        $aktualni_ohlasky['chyba'] = $chyba;
        return $aktualni_ohlasky;
    }

    function getTyden($tyden_cislo_str, $rok_str) {
        $chyba = '';
        if (!empty($tyden_cislo_str) && (!empty($rok_str))) {
            $tyden_obj = null;
            $tyden_cis_int = intval($tyden_cislo_str);
            if (($tyden_cis_int < 1) || ($tyden_cis_int > 54)) {
                $chyba = 'Špatné číslo týdne!';
            }
            if (empty($chyba)) {
                $rok_int = intval($rok_str);
                if (($rok_int < 2009) || ($rok_int > 2037)) {
                    $chyba = 'Špatný rok!';
                }
            }
            if (empty($chyba)) {
                $db =& JFactory::getDBO();
                $query4 = 'SELECT * FROM #__tydny WHERE #__tydny.rok = '.$rok_int.' AND #__tydny.tyden_cislo = '.$tyden_cis_int;
                $db->setQuery( $query4 );
                $tyden_obj = $db->loadObject();
            }
            return $tyden_obj;
        } else {
            $chyba = 'Nebyl předán jeden z parametrů: číslo týdne, rok!';
            return null;
        }
    }

    function getTyden_id($tyden_id_int) {
        $db =& JFactory::getDBO();
        $query6 = 'SELECT * FROM #__tydny WHERE #__tydny.id = '.$tyden_id_int;
        $db->setQuery( $query6 );
        $tyden_obj = $db->loadObject();
        return $tyden_obj;
    }

}

